/**
 * 智慧小区管理系统 - 路由权限守卫
 * 
 * 权限控制粒度简化：
 * - 移除按钮权限验证
 * - 保留菜单权限验证
 * - 简化路由访问控制
 * 
 * @author Wu.Liang
 * @date 2024-01-01
 * @updated 2025-01-30 - 简化路由守卫，移除复杂的权限获取逻辑
 */
import router from '@/router'
import { useUserStore } from '@/store/user'
import { usePermissionStore } from '@/store/permission'
import { ElMessage } from 'element-plus'
import { generateRoutes } from '@/utils/route-generator'

// 白名单路由
const whiteList = ['/login', '/404', '/403']

// 路由守卫
router.beforeEach(async (to, from, next) => {
    const userStore = useUserStore()
    const permissionStore = usePermissionStore()


    
    if (userStore.isLogged) {
        if (to.path === '/login') {
            next({ path: '/dashboard' })
            return
        }
        // 权限未准备好，尝试从用户信息初始化权限
        if (!permissionStore.menuPermissionCodes.length) {
            try {
                const initSuccess = await permissionStore.initPermissionsFromUserInfo()
                // 如果初始化失败，但不影响页面访问，继续执行
                if (!initSuccess) {
                    console.warn('权限初始化失败，但继续访问页面')
                }
            } catch (error) {
                console.error('权限初始化异常:', error)
                // 权限初始化异常不影响页面访问
            }
        }
        if (to.meta?.permission) {
            const requiredPermission = to.meta.permission as string
            const hasPermission = permissionStore.hasMenuPermission(requiredPermission)
            console.log(`权限检查: ${to.path}, 需要权限: ${requiredPermission}, 是否有权限: ${hasPermission}`)
            console.log('当前用户权限列表:', permissionStore.menuPermissionCodes)
            if (!hasPermission) {
                console.warn(`权限不足: ${to.path}, 需要权限: ${requiredPermission}`)
                next('/403')
                return
            }
        }
        next()
    } else {
        if (whiteList.includes(to.path)) {
            next()
        } else {
            next('/login')
        }
    }
})

// 路由后置守卫
router.afterEach((to) => {
    // 设置页面标题
    const title = to.meta?.title as string
    if (title) {
        document.title = `${title} - 智慧小区管理系统`
    } else {
        document.title = '智慧小区管理系统'
    }
    
    console.log('路由跳转完成:', to.path)
})

// 路由错误处理
router.onError((error) => {
    console.error('路由错误:', error)
    ElMessage.error('页面加载失败，请稍后重试')
})

export default router 